package org.example.util;

import org.example.javabean.User;
import mapper.UserMapper;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.util.Date;

public class UserTest {
    SqlSession session;
    UserMapper userMapper;

    @Before
    public void a() {
        //1、创建SqlSessionFactory对象，也是单例模式的
        SqlSessionFactory factory = MyBatisUtil.getSqlSessionFactory();
        //2、创建SqlSession对象 true 自动提交事务 不写也没事 因为默认在sqlsession关闭时提交事务
        session = factory.openSession(true);
        //3、调用session的方法namespace的名字.id
        userMapper=session.getMapper(UserMapper.class);
    }

    @After
    public void b() {
        //5、关闭资源
        session.close();
    }
    //mybatis缓存  在第一次查询操作后 如果没有进行修改操作 会将结果存储在缓存中为后续查询使用
    //为了提高查询的效率降低数据库操作的损耗 默认开启一级缓存
    //一级缓存存储在当前会话中
    @Test
    public void selectAll(){
        userMapper.selectAll();
        System.out.println("1111111");
        userMapper.selectAll();
        System.out.println("1111111");
        userMapper.selectAll();
    }
    //二级缓存 存储在服务器中 第一个会话执行完毕后 会将查询的结果由一级缓存推送至二级缓存
    @Test
    public void selectAll2(){
        userMapper.selectAll();
        System.out.println("1111111");
        userMapper.selectAll();
        System.out.println("1111111");
        userMapper.selectAll();
    }
    @Test
    public void insertUser(){
        User u=new User("a1",200,new Date());
        userMapper.insertUser(u);
    }
    @Test
    public void insertUser1(){
        User u=new User("a1",200,new Date());
        userMapper.insertUser1(u);
        //执行完毕后会根据配置 将添加行数据的id赋值给参数中的变量属性
        System.out.println(u);
    }
    @Test
    public void insertUser2(){
        User u=new User("a1",200,new Date());
        userMapper.insertUser2(u);
        //执行完毕后会根据配置 将添加行数据的id赋值给参数中的变量属性
        System.out.println(u);
    }
}